<!--
/*
 * $RCSfile: j3d1x3-cave-vr.html,v $
 *
 * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistribution of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 * - Redistribution in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in
 *   the documentation and/or other materials provided with the
 *   distribution.
 *
 * Neither the name of Sun Microsystems, Inc. or the names of
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * This software is provided "AS IS," without a warranty of any
 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
 * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
 * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
 * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
 * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
 * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
 * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
 * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 *
 * You acknowledge that this software is not designed, licensed or
 * intended for use in the design, construction, operation or
 * maintenance of any nuclear facility.
 *
 * $Revision: 1.4 $
 * $Date: 2007/02/09 17:20:46 $
 * $State: Exp $
 */
 -->

<html>
<head>
   <title>j3d1x3-cave-vr config file</title>
</head>

<body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<pre>
/*
 ************************************************************************
 *  
 * Java 3D configuration file for a cave environment with head tracking and
 * stereo viewing.  This cave consists of 3 projectors with 3 screens to the
 * left, front, and right of the user, all at 90 degrees to each other.
 * 
 * The projectors in Sun's VirtualPortal sample site are actually turned
 * on their sides to get more height.  Screen 0 is rotated 90 degrees
 * counter-clockwise, while screens 1 and 2 are rotated 90 degrees
 * clockwise.
 * 
 ************************************************************************
 */

// Configure the head tracker.
// 
(NewDevice      tracker1 com.sun.j3d.input.LogitechTracker)
(DeviceProperty tracker1 SerialPort "/dev/ttya") // Unix paths need quoting.
(DeviceProperty tracker1 TransmitterBaseline            0.4600)
(DeviceProperty tracker1 TransmitterLeftLeg             0.4400)
(DeviceProperty tracker1 TransmitterCalibrationDistance 0.4120)

// Configure an InputDevice to use for a 6 degree of freedom wand.
// 
(NewDevice      tracker2 com.sun.j3d.input.LogitechTracker)
(DeviceProperty tracker2 SerialPort "/dev/ttyb")
(DeviceProperty tracker2 ReceiverBaseline     0.0700)
(DeviceProperty tracker2 ReceiverLeftLeg      0.0625)
(DeviceProperty tracker2 ReceiverHeight       0.0510)
(DeviceProperty tracker2 ReceiverTopOffset    0.0000)

// Make the tracker2 device a slave of the tracker1 device.
(DeviceProperty tracker1 Slave (Device tracker2))

// Create logical names for the head tracker and wand sensors.  The last
// argument is the sensor's index in the input device.
// 
(NewSensor head     tracker1 0)
(NewSensor sensor6d tracker2 0)

// Create new screen objects and associate them with logical names and numbers.
// These numbers are used as indices to retrieve the AWT GraphicsDevice from
// the array that GraphicsEnvironment.getScreenDevices() returns.
// 
// NOTE: The GraphicsDevice order in the array is specific to the local
// site and display system.
// 
(NewScreen left    0)
(NewScreen center  1)
(NewScreen right   2)


// Set the available image areas as well as their positition and orientation
// relative to the tracker base.  From the orientation of a user standing
// within this VirtualPortal site and facing the center screen, the tracker
// base is along the vertical midline of the screen, 0.248 meters down from
// the top edge, and 1.340 meters in front of it.  The tracker base is
// oriented so that its +X axis points to the left, its +Y axis points toward
// the screen, and its +Z axis points toward the floor.
// 
(ScreenProperty        left    PhysicalScreenWidth     2.480)
(ScreenProperty        left    PhysicalScreenHeight    1.705)
(ScreenProperty        left    WindowSize              NoBorderFullScreen)
(ScreenProperty        left    TrackerBaseToImagePlate
                                (( 0.0  0.0 -1.0  2.230)
                                 ( 0.0 -1.0  0.0  1.340)
                                 (-1.0  0.0  0.0  0.885)))

(ScreenProperty        center  PhysicalScreenWidth     2.485)
(ScreenProperty        center  PhysicalScreenHeight    1.745)
(ScreenProperty        center  WindowSize              NoBorderFullScreen)
(ScreenProperty        center  TrackerBaseToImagePlate
                                (( 0.0  0.0  1.0  0.248)
                                 (-1.0  0.0  0.0  0.885)
                                 ( 0.0 -1.0  0.0  1.340)))

(ScreenProperty        right   PhysicalScreenWidth     2.480)
(ScreenProperty        right   PhysicalScreenHeight    1.775)
(ScreenProperty        right   WindowSize              NoBorderFullScreen)
(ScreenProperty        right   TrackerBaseToImagePlate
                                (( 0.0  0.0  1.0  0.2488)
                                 ( 0.0 -1.0  0.0  1.340)
                                 ( 1.0  0.0  0.0  0.860)))

// Create a physical environment.  This contains the available input devices,
// audio devices, and sensors, and defines the coexistence coordinate system
// for mapping between the virtual and physical worlds.
// 
(NewPhysicalEnvironment VirtualPortal)

// Register the input device defined in this file and the sensor which will
// drive head tracking.
// 
(PhysicalEnvironmentProperty VirtualPortal InputDevice tracker1)
(PhysicalEnvironmentProperty VirtualPortal InputDevice tracker2)
(PhysicalEnvironmentProperty VirtualPortal HeadTracker head)

// Set the location of the center of coexistence relative to the tracker base.
// Here it set to the center of the center screen.  The default view attach
// policy of NOMINAL_SCREEN used by ConfiguredUniverse will place the origin of
// the view platform in coexistence coordinates at the center of coexistence.
// 
(PhysicalEnvironmentProperty VirtualPortal
                             CoexistenceToTrackerBase
                                ((-1.0  0.0  0.0  0.000)
                                 ( 0.0  0.0 -1.0  1.340)
                                 ( 0.0 -1.0  0.0  0.994)))

// Define the physical body.  The head origin is halfway between the eyes, with
// X extending to the right, Y up, and positive Z extending into the skull.
// 
(NewPhysicalBody      LabRat)       
(PhysicalBodyProperty LabRat StereoEyeSeparation .07)

// Define the position and orientation of the head relative to the tracker
// mounted on the head.
// 
(PhysicalBodyProperty LabRat HeadToHeadTracker 
                                 ((-1.0  0.0  0.0 0.00)
                                  ( 0.0  0.0 -1.0 0.05)
                                  ( 0.0 -1.0  0.0 0.11)))

// Create a view platform behavior for the 6DOF sensor.
// 
(NewViewPlatformBehavior vpb com.sun.j3d.utils.behaviors.vp.WandViewBehavior)

(ViewPlatformBehaviorProperty vpb Sensor6D sensor6d)
(ViewPlatformBehaviorProperty vpb ButtonAction6D 2 GrabView)
(ViewPlatformBehaviorProperty vpb ButtonAction6D 1 TranslateForward)
(ViewPlatformBehaviorProperty vpb ButtonAction6D 0 TranslateBackward)

// Default normal translation speed is 0.1 physical meters per second.
(ViewPlatformBehaviorProperty vpb TranslationSpeed
                              1.0 PhysicalMeters PerSecond)

// Default rotation coordinates are Sensor.
(ViewPlatformBehaviorProperty vpb RotationCoords Head)

// Nominal sensor transform for modified joystick RedBarron
(SensorProperty sensor6d Hotspot (0.00 0.6 0.00))
(ViewPlatformBehaviorProperty vpb NominalSensorRotation
                                  ((-1.0  0.0  0.0)
                                   ( 0.0  0.0 -1.0)
                                   ( 0.0 -1.0  0.0)))

// Default 6DOF sensor echo is Gnomon
(ViewPlatformBehaviorProperty vpb EchoSize 0.015) 
(ViewPlatformBehaviorProperty vpb EchoType Beam) 

// Default 6DOF sensor echo color is white
(ViewPlatformBehaviorProperty vpb EchoColor 1.0 0.7 0.0)

// Default 6DOF sensor transparency is 0.0 (opaque)
(ViewPlatformBehaviorProperty vpb EchoTransparency 0.4)

// Create a new view platform and set the view platform behavior.
// 
(NewViewPlatform vp)
(ViewPlatformProperty vp ViewPlatformBehavior vpb)

// Now define the view.
// 
(NewView       view0)
(ViewProperty  view0   Screen                  left)
(ViewProperty  view0   Screen                  center)
(ViewProperty  view0   Screen                  right)
(ViewProperty  view0   PhysicalBody            LabRat)
(ViewProperty  view0   PhysicalEnvironment     VirtualPortal)
(ViewProperty  view0   ViewPlatform            vp)

// Set the screen scale.  This is scale factor from virtual to physical
// coordinates.
// 
(ViewProperty  view0   ScreenScalePolicy       SCALE_SCREEN_SIZE)

// Alternative for explict scaling.
// 
//(ViewProperty  view0   ScreenScalePolicy       SCALE_EXPLICIT)
//(ViewProperty  view0   ScreenScale             5.00)

// Enable stereo viewing.  Enable head tracking to get the position of the eyes
// with respect to coexistence.  Boolean values may be specified as either
// true, True, false, or False.
// 
(ViewProperty    view0   StereoEnable            true)
(ViewProperty    view0   TrackingEnable          True)
</pre>
</body>
</html>
